/** ******************************************************************************** */
Ext.BLANK_IMAGE_URL = "../js/ext/resources/images/default/s.gif";
var i=0;
/** ************************************************************************************** */
newsInfoForm = Ext.extend(Ext.form.FormPanel, {
			categoryCombobox:null,
			constructor : function() {
				this.categoryCombobox = new Ext.form.ComboBox({		//定义combobox组件
				hiddenName : "cid",
				fieldLabel : "新闻所在栏目",
				anchor:"98%",
				width:200,
				displayField:"ctitle",
				valueField : "cid",
				triggerAction : "all",
				allowBlank:false,
				modal : "remote",
				emptyText:"请务必选择新闻所在栏目",
				blankText:"发布新闻，请先指定所属栏目",
				store : new Ext.data.Store({
						autoLoad : true,
						url : "../admin/getSCategoryList.action",
						reader : new Ext.data.ArrayReader({}, ["cid", "ctitle"])
					}),
				listeners:{
							"select":{
										fn:this.onSelectedAction,
										scope:this
									}
							}
				});
		
		newsInfoForm.superclass.constructor.call(this, {
							frame:true,
							labelWidth:70,
							items : [{
								anchor : '100%',
								layout:'form',
								items : [{xtype:"hidden",name:'nid'},
										{xtype:'hidden',name:'ndate'},
										{xtype:'hidden',name:'nhref'},
										{xtype:'hidden',name:'nclicked',value:1},
										{xtype:'hidden',name:'ctitle'},
										{xtype:'hidden',name:'ntoplevel',value:new Date().getTime()},
										{xtype:'hidden',name:'nvisiable',value:true},{
											xtype : 'textfield',
											fieldLabel : '新闻标题',
											anchor : '98%',
											name : 'ntitle',
											allowBlank : false
										},this.categoryCombobox, {
											xtype : 'textarea',
											anchor : '98%',
											fieldLabel : "新闻摘要",
											name : 'nsummary'
										},{
											id:"ncontent",
	                                      	name: 'ncontent',
	                                        fieldLabel: '新闻内容',
	                                        height: 280,
	                                        xtype:'fckeditor',
	                                        anchor:'100%'
										},                                       
	                                    {
	                                    	html:"说明：！@#%￥……%￥&……%*&（*（*））——）——…………&%……%￥",
	                                    	layout:'column',
	                                    	items:[{
	                                    			columnWidth:.3,
	                                    			layout:'form',
	                                    			defaults:{width:90,labelWidth:180},
	                                    			defaultType :'combo',
	                                    			items:[{
	                                    				name:"isvisiable",
														fieldLabel : "是否发布",
														value:"是",
														displayField:"isvisiable",
														triggerAction : "all",
														mode:'local',
														store:new Ext.data.SimpleStore({
																					/*data:[[true,"是"],[false,"否"]],
																					fields:["nvisiable","ndisplay"]*/
																						data:[["是"],["否"]],
																						fields:["isvisiable"]
																					}),
														listeners:{
															"select":{
																	fn:function(){//如果isvisiable为是，则nvisiable为true表示客户可以浏览得到
																		var isvisiable = this.getForm().findField("isvisiable");
																		var nvisiable = this.getForm().findField("nvisiable");
																			isvisiable.getValue()==="是"?nvisiable.setValue(true):nvisiable.setValue(false);},
																	scope:this
																}
														}
	                                    			}]
												},{
														columnWidth:.3,
		                                    			layout:'form',
		                                    			defaults:{width:90,labelWidth:180},
		                                    			defaultType :'combo',
				/***************************************/items:[{
		     												name:"istoplevel",
															fieldLabel : "置最高顶",
															value:"是",
															displayField:"istoplevel",
															//valueField : "cid",
															triggerAction : "all",
															mode:'local',
															store:new Ext.data.SimpleStore({
																						data:[["是"],["否"]],
																						fields:["istoplevel"]
																						}),
															listeners:{
																	"select":{
																	fn:function(){//如果isvisiable为是，则nvisiable为true表示客户可以浏览得到
																		var istoplevel = this.getForm().findField("istoplevel");
																		var ntoplevel = this.getForm().findField("ntoplevel");
																		istoplevel.getValue()==="是"?ntoplevel.setValue(new Date().getTime()):ntoplevel.setValue(0);},
																	scope:this
																}
																	
																}
		         /***************************************/  }]
												},{
													columnWidth:.4,
													layout:'form',
													items:{
														name:'nwriter',
														xtype:"textfield",
														fieldLabel:"新闻作者",
														value:"无名氏"}
													}]
	                                    }]// panel中的items
								}]
						});
			},//constructor
        getValueObject:function(){			///返回一个数据对象dataObject
        	return	this.getForm().getValues(false);
        },
        onSelectedAction:function(){	//combobox以改变，马上设置隐藏字段ctitle的值
        	alert(this.getForm().findField("ctitle").getRawValue());
        	this.getForm().findField("ctitle").setValue(
        									this.getForm().findField("cid").getRawValue()
        								);		
        }
		})

		
/** ************************************************************************************** */
BasicInfoWindow = Ext.extend(Ext.Window, {
			formPanel:null,
			flag:0,
			constructor : function(_cfg) {
				if(_cfg == null)
					_cfg = {} ;
				
				this.formPanel=new newsInfoForm();
				BasicInfoWindow.superclass.constructor.call(this, {// config
					//renderTo:Ext.getBody(),
					//baseCls:"x-plain",
					//id:"win"+i++,
					buttonAlign:"center",
					plain:true,
					//title : "添加新闻窗口",
					width : 900,
					height : 550,
					items:this.formPanel,
					modal:true,
					frame:true,
					buttons:[{//如何重写此buttons呢？
								text:"确定",
								handler:this.onSureClick, 
								scope:this									
							 },{
							 	text:"取消",
							 	handler:this.onCancelAction,
							 	scope:this
							 }],
					listeners:{
						//closeAtion:close,
						"show" : {
							fn:this.inited,
							scope:this
						}
					}
				});
				this.addEvents("addSure");//添加时触发addSure事件
				this.addEvents("editoSure");//编辑模块时触发editorSure事件，即是发动信息，更改后台数据库新闻信息
				this.addEvents("editorReady");
				//this.addEvents("updateSure");
				this.on("editorReady",this.seteditorflag,this);
				Ext.apply(this , _cfg) ;
			},
		seteditorflag:function(type){
			//alert(type);
			if(type=="editor"){
				this.flag=1;
			}else{
				this.flag=0;
			}
			//	alert(this.flag);
		},
		 inited:function(){		//窗口显示的时候就初始化表单数据
		 		alert("show后 初始化表单 即是inited方法调用，其中有ncontent。setValue（）...");//
		 		//var ojson={};			   //
			    this.formPanel.getForm().items.each(function(f) {
			     var field = f.getName();
			   //  var temp = {};			   //
			     f.originalValue="";
			     if(field=='ntoplevel')
			   		f.originalValue=new Date().getTime();
			   	 if(field=='nvisiable')
			   	 	f.originalValue=true;
			   	 if(field=='istoplevel')
			   	 	f.originalValue="是";
			   	 if(field=='isvisiable')
			   	 	f.originalValue="是";
			  
			   	f.setValue("");
			
			   });
			    this.formPanel.getForm().clearInvalid();

		},
		isDirty:function(){
			
			this.formPanel.getForm().isDirty()
		},


		onSureClick:function(){
			if(this.flag==0){	//添加
				this.addAction();
			}else{			//编辑    
				
				this.editorAction();
			}
	    	 },
	
    	 onCancelAction:function(){
    	 		this.hide();
    	 		this.close();
    	 },
    	 addAction:function(){	//flag=0 控制添加时的【确定】按钮的执行动作
    	 			if(this.formPanel.getForm().isValid()){	//如果效验通过 
	     			var oJson = this.formPanel.getValueObject();	//获取一个数据对象
	     			//oJson["ctitle"]=this.formPanel.getForm().findField("cid").getRawValue();//设置ctitle属性的值
	     			//oJson["ntoplevel"]=oJson["ntoplevel"]=="是"?new Date().getTime():oJson["ntoplevel"]=0;//否则置底
	     			//oJson["nvisiable"]=oJson["nvisiable"]=="是"?true:false;//是则true 表示发布
	     			//oJson["ncontent"]=oJson["ncontent0"];
	     			delete oJson["isvisiable"];
	     			delete oJson["istoplevel"];
	     			alert(Ext.util.JSON.encode(oJson));
	     			//var _r = new Ext.data.Record(oJson);
	     			this.fireEvent("addSure",this,oJson);
    	 			}else								//校验没通过 信息提示
    	 			{
    	 				Ext.Msg.alert("提示",'请正确输入新闻所需信息');
    	 			}
	     			
    	 },
    	 editorAction:function(){//flag=1控制编辑时的【确定】按钮的执行动作
    	 	alert("window 上 editorAction 判断是否有脏数据....");
						if(!this.formPanel.getForm().isDirty()){

							Ext.Msg.confirm("提示！","你还未修改任何信息，退出编辑->确定，不退出->按取消",
												this.onExitQuestionClick,this);
						}else{
							Ext.Msg.confirm("提交发布提示","你确定要执行此修改动作？",this.onEditorConfirmClick,this);
						}
			},
		onExitQuestionClick:function(_btn){
							if(_btn == "yes"){ 
								this.flag=0;
								this.hide();
								this.close();
							//var _rs = this.getSelectionModel().getSelected() ;

							}else{
								
								//this.inserted.remove(_rs) ;
								
								//this.getStore().modified.remove(_rs) ;
								
							}
		},
		onEditorConfirmClick:function(_btn){			//	确定发布，更改后台数据库信息
				if(_btn == "yes"){
					var oJson={};        //封装修改过的字段json格式
					alert("onEditorConfirmClick方法的调用，此时是确定修改动作，有ncontent.idDirty与getValue调用，所以有两次fckeditor获值的输出（实际是4次）。。。");
					alert("输出fckeditor当前的value="+Ext.get('ncontent').dom.value );
					//alert("设置")
					this.formPanel.getForm().items.each(function(f) {//遍历过程过滤掉isvisiable，istoplevel字段的信息
								            if (f.isDirty()&&(f.getName()!="isvisiable"||f.getName()!="istoplevel")) {
								            	var temp={};
								            	temp[f.getName()]=f.getValue();
								            		//var name = f.getName();
								            		Ext.apply(oJson,temp);
								           		 }
								       	 }
					);
					alert(Ext.util.JSON.encode(oJson));
					this.flag=0;//把editor/add模块的标识复原
					
		        	this.fireEvent("editorSure",oJson);//调动grid中的basicWindow的事件处理函数
		        	//this.close();
					//var oJson =this.formPanel.getForm().getFieldValues(true);//获取修改的数据对象
				//	alert(oJson);
					/*this.fireEvent("editorSure");
					this.formPanel.getForm().submit({
						url:"#",
						params:"",
						method:'post',
						success:this.onSubmitCallBak,
						waitMsg:"正在提交更新...."
						});
							this.close();*/
				}else{
					this.flag=1;//保持原来编辑模块状态
				}
		},
				onSubmitCallBak:function(_form,_action){
					alert(_action.result);
				}
 

		})


/** ************************************************************************************* */
NewsManageGridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
	categoryCombobox:null,
	sm:null,
	store:null,
	categoryStore:null,
	basicWindow:null,
	temprecord:null,//临时变量，在loadRecord前改变ntoplevel值为是/否，以这样的记录编辑新闻信息
	inserted:null,
		constructor : function() {//重写构造方法
				this.inserted=[];
				this.basicWindow = new BasicInfoWindow();
				this.categoryStore=new Ext.data.Store({
						//autoLoad : true,
						url : "../admin/getSCategoryList.action",
						reader : new Ext.data.ArrayReader({}, ["cid", "ctitle"])
					});
				this.categoryCombobox = new Ext.form.ComboBox({		//定义combobox组件
					hiddenName : "cid",
					//fieldLabel : "cTitle",
					listWidth:200,
					width:200,
					displayField:"ctitle",
					valueField : "cid",
					triggerAction : "all",
					mode : "remote",
					value:"   全部      ",
					width:70,
					store : this.categoryStore,
					listeners:{
								"select":{
											fn:this.onSelectedAction,
											scope:this
										}
								}
				});
				//alert(categoryCombobox);
				this.store=new Ext.data.JsonStore({
												url:"../admin/newsList.action",
												//reader:new Ext.data.JsonReader({
												baseParams :{categoryid:0},
												root:"data",//categorys数据
												totalProperty  :"totalProperty",//总数
												fields:[
														{name:"nid",mapping:"nid"},//本新闻id
														{name:"cid",mapping:"cid"},//本新闻所在栏目编号
														{name:"ctitle",mapping:"ctitle"},
														{name:"ntitle",mapping:"ntitle"},//本新闻标题
														{name:"nwriter",mapping:"nwriter"},//本新闻作者
														{name:"nclicked",mapping:"nclicked"},//本新闻点击数
														{name:"ntoplevel",mapping:"ntoplevel"},//本新闻置顶等级
														{name:"nvisiable",mapping:"nvisiable"},//本新闻首页显示boolean值
														{name:"ndate",mapping:"ndate"},//本新闻添加日期
														{name:"nhref",mapping:"nhref"},//本新闻链接
														{name:"ncontent",mapping:"ncontent"}//本新闻内容
														],
												listeners :{
															"update":{
																	fn:this.disableWidget,
																	scope:this
															}
													}
										});//本grid与分页Ext.PagingToolbar共享/////////////////
								
								
		this.store.load({params:{start:0 , limit:5}});//五条记录
		
	
		this.sm=new Ext.grid.CheckboxSelectionModel({
						
							});
		NewsManageGridPanel.superclass.constructor.call(this, {
								renderTo : Ext.getBody(),
								title : "新闻管理窗口",
								width : 700,
								height : 400,
								store:this.store,
								sm:this.sm,
								defaults:{width:150},
								tbar : [{
											id:'save',
											text : "保存",
											disabled:true,
											handler:this.onSaveClick,
											scope:this
										},"-",{
											text : "添加",
											handler:this.showInsertWindow,
											scope:this
										},"-",{
											text:"编辑",
											handler:this.showEditorWindow,
											scope:this
										},"-",{
											text : "删除"
										},"-","所在栏目",this.categoryCombobox],
					
								columns :[
										new Ext.grid.RowNumberer(), // 数据序列// 定义列模型
										 this.sm,{//name:"ctitle",mapping:"ctitle"},//本新闻所在栏目,{
										 	id:"cid",
										 	header:"栏目编号",
										 	dataIndex:"cid"
										 },{
										 	id:"ctitle",
										 	header:"栏目",
										 	dataIndex:"ctitle"
										 },{
											id : "ntitle",
											header : "标题", // 显示值
											width : 110,
											dataIndex : "ntitle", // 映射到Record中定义的数据行其中一列的逻辑名
											editor : new Ext.grid.GridEditor(new Ext.form.TextField())
										},{
											id : "nwriter",
											header : '作者',
											dataIndex : "nwriter",
											editor : new Ext.grid.GridEditor(new Ext.form.TextField())
										}, {
											id : "nhref",
											header : "链接",
											width:250,
											dataIndex : "nhref"//,
											//editor : new Ext.grid.GridEditor(new Ext.form.TextField())
										} ,{
											id : "nvisiable",
											header : "首页显示",
											//width : "20",//我有病啊！又犯这样的错！靠靠~~~
											dataIndex : "nvisiable",
											renderer:function(_v){if(_v)
																	return "<span  style='margin-right:10px'>发布</span>";
																	else
																	return "<span  style='margin-right:10px'>尚未发布</span>"},
											editor : new Ext.grid.GridEditor(new Ext.form.ComboBox({
																							displayField:"isvisiable",
																							triggerAction : "all",
																							mode : "local",
																							store:new Ext.data.SimpleStore({
																											data:[[true],[false]],
																											fields:["isvisiable"]
																											})
																								}
																								))
										}, {
											id : "ntoplevel",
											header : "置顶",
											dataIndex:"ntoplevel",
											
											renderer:function(_v){
																		//alert("ok");
																		return  "<img src='../js/master/images/icon/lightbulb.gif' onclick=javascript:alert(Ext.getCmp('ntoplevel')); >"
																		}
										}],
								//store : new Ext.data.JsonStore({}, []),
				bbar : new Ext.PagingToolbar({
								store : this.store, // 作为pagingToolbar的数据存储器
								pageSize : 5,
								displayInfo : true,
								displayMsg : "当前显示从{0}条到{1}条,共{2}条",
								emptyMsg : "<span style='color:red;font-style:italic;'>对不起,没有找到数据</span>"
							})
		});
		
		this.basicWindow.on("addSure",this.onWinAddAction,this);
		this.basicWindow.on("editorSure",this.onWinUpdateAction,this);//注册编辑窗口的eitorSure事件，调用处理函数去跟新后天数据库~
	},
	/*insert:function(_r){
			this.store.add(_r);
	},*/
	onWinUpdateAction:function(_oJson){
	
		var selModel = this.getSelectionModel();
		var record = selModel.getSelected();
		//Ext.apply(record.data,_oJson);//这样不行把修改过的数据覆盖原来的数据
		var _key="";
		for(_key in _oJson)
		{
			record.set(_key,_oJson[_key]);
		};
		
		this.basicWindow.hide();
		this.basicWindow.close();
	
		alert("确定修改之后，新闻内容为："+this.getSelectionModel().getSelected().data["ncontent"]);
		///try{	/ert(this.basicWindow.close());}catch(_err){alert("dfdfd")}
	
	},
	/*onExpand:function(){
			
	},*/
	onSelectedAction:function(){		//combobox选着查询
	
		var _cid =this.categoryCombobox.getValue();
		//this.store.baseparams=
		Ext.apply(this.store.baseParams,{categoryid:_cid});
	
		this.store.reload({params:{start:0,limit:5}});
		
		},
	onWinAddAction:function(_insertWin,oJson){	//在本gridpanel中添加一条record
		alert("add news..win close..");
		//var newsrecord = Ext.data.Record.create(this.store.fields);
		this.basicWindow.close();
		var _r = new Ext.data.Record({
							"nid":"",//本新闻id
							"cid":"",//本新闻所在栏目编号
							"ctitle":"",
							"ntitle":"",//本新闻标题
							"nwriter":"",//本新闻作者
							"nclicked":"",//本新闻点击数
							"ntoplevel":"",//本新闻置顶等级
							"nvisiable":"",//本新闻首页显示boolean值
							"ndate":"",//本新闻添加日期
							"nhref":"",//本新闻链接
							"ncontent":""//本新闻内容
								});
		this.store.insert(0,_r);
		var _key="";
		for(_key in oJson){
			_r.set(_key,oJson[_key])
		};
		this.inserted.push(_r);
		this.startEditing(0,4);
		//alert(newsrecord);
		},
	showInsertWindow:function(){
				//alert("reset start ..");
				//this.basicWindow.formPanel.getForm().reset();
				this.basicWindow.show();	
				this.basicWindow.fireEvent("editorReady","add");	//触发editorReady事件，以参数add，让显示窗口的编辑标记flag变为0
		},
	showEditorWindow:function(){
			var selModel =this.getSelectionModel();
			var record;
			if(selModel.getCount())
			{
				
				if(selModel.getSelections().length==1)
				{
					alert("showEditorWindow");
					
					temprecord=record=selModel.getSelected();
					alert("show之前，新闻内容为："+record.data["ncontent"]);
					alert(record.data["nvisiable"]);
					if(record.data["nvisiable"])//如果原数据发布字段为true，这isvisiable字段为是
					{Ext.apply(temprecord.data,{"isvisiable":"是"});
						//alert("is true");
					}
					else
					{Ext.apply(temprecord.data,{"isvisiable":"否"});
						//alert("is false");
					}
					Ext.apply(temprecord.data,{"istoplevel":"否"});//设置istoplevel为否，编辑模块的否表示不更改原来的置顶等级
					//alert("loadrecord之前装配需要加载的temprecord数据，如下...");
					//alert(Ext.util.JSON.encode(temprecord.data));//输出装配好的数据对象
					
					this.basicWindow.show();
					  alert("show 后初始化表单结束....下一步是开始loadRecord，即是加载数据,会调用(此设置只会影响textarea)f.setValue()...");
			        alert("loadrecord之前，temprecord的新闻内容"+temprecord.data["ncontent"]);
					this.basicWindow.formPanel.getForm().loadRecord(temprecord);
					alert("loadrecord之后，temprecord的新闻内容"+temprecord.data["ncontent"]);
					
/*					this.basicWindow.formPanel.getForm().items.each(function(f){ //给原始值再次赋值
						      
						      if(f.getName()=="ncontent"){//如果是新闻内容才输出
							    alert(f.getName()+"的原始数据（即是为用f.getValue赋值给原始值((前))的原始值）="+f.originalValue);

							      alert("f.getValue()="+f.getValue());
							      };
							    
							      f.originalValue=f.getValue();
							  
						});*/
					this.basicWindow.fireEvent("editorReady","editor");
					
				}else{
					alert("只能编辑一条记录");
				}
			}else{
				alert("请选着要编辑的记录");
			}
				
		},
		disableWidget:function(){
			var modified =this.getStore().modified;
			
			if(modified.length>0)
			{
				//alert("length="+modified.length);
				
				Ext.getCmp('save').enable();
				
				this.categoryCombobox.disable();
				return ;
			}
			Ext.getCmp('save').disable();
			this.categoryCombobox.enable();
		},
		onSaveClick:function(){		//保存数据到数据库
				var _m = this.getStore().modified ;//m是record类型数组【record】
				
				var _updatedata = [] ;//想服务器发送类似【{}{}】这样的json数组
				
				var _addata = [];//前台添加的数据
				
				for(var _i = 0 ; _i < _m.length ; _i ++){//获取修改的数据
					
					if(_m[_i].get("nid") == "")
					
						continue ;
					
					var _data = {} ;
					
					var _j = "" ;
					
					for(_j in _m[_i].modified)//这里的_m【_i】.modified是键/值对，json形式，_j是其中的键
					
						_data[_j] = _m[_i].get(_j) ;//get the value of named field //json{}对象
				
					_updatedata.push(Ext.apply(_data , {nid:_m[_i].get("nid")})) ;
					
				}
				
				for(var _i = 0 ; _i < this.inserted.length ; _i ++)//获取添加的数据
				
					_addata.push(this.inserted[_i].data) ; //inserted是【record类型】数组，那么insert[i]则是record对象，data这是数据对象（在这是json对象）
					
				alert("修改的数据如下：");
				alert(Ext.util.JSON.encode(_updatedata));
				alert("添加的数据如下：");
				alert(Ext.util.JSON.encode(_addata));
					
				this.getStore().commitChanges();//
				Ext.getCmp("save").enable();
				alert(this.getStore().modified.length);
		},

		onclicl:function(){
			alert("ok");
			
		}
})

